package com.anxin.act.task.complete.impl;

import com.alibaba.fastjson.JSONArray;
import com.anxin.act.task.complete.TaskComplete;
import com.anxin.act.task.service.AddTaskService;
import com.anxin.act.task.service.WfActHiCommentService;
import com.anxin.act.task.service.WfActRuTaskService;
import com.anxin.act.task.vo.TaskVo;
import com.anxin.act.utils.ActTaskUtils;
import com.anxin.act.utils.ActUtils;
import com.anxin.common.utils.sys.UserUtils;
import org.activiti.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;

/**
 * 前加签提交
 *
 * @author: liuxiangyu
 * @date: 2020/4/26 16:22
 */
@Service
public class AddBeforeTaskCompleteImpl extends TaskComplete {

    @Autowired
    private AddTaskService addTaskService;

    @Autowired
    private WfActHiCommentService wfActHiCommentService;

    @Autowired
    private WfActRuTaskService wfActRuTaskService;


    /**
     * 提交流程
     *
     * @param taskVo
     */
    public String complete(TaskVo taskVo) {
        // wfActHiCommentService.addComment(taskVo.getActId(),taskVo.getId(), "前加签:" + UserUtils.getNickNamesByUserArray(taskVo.getAddUser()));
        wfActHiCommentService.addComment(taskVo,taskVo.getId());
        // 提交任务
        wfActRuTaskService.complete(taskVo.getId(),taskVo.getOpinions());

        return taskVo.getId();

    }




//    /**
//     * 提交流程
//     *
//     * @param taskVo
//     */
//    public void completeTemp(TaskVo taskVo) {
//        // 审批意见中增加加签人员
//        super.addComment(taskVo, "前加签:" + UserUtils.getNickNamesByUserArray(taskVo.getAddUser()));
//        // 保存审批意见
//        super.addComment(taskVo);
//
//        ActivityImpl activityImpl = ActUtils.getActivityImpl(taskVo.getProcessDefId(), taskVo.getTaskKey());
//        //会签节点的前加签
//        if (activityImpl.getActivityBehavior().getClass() == ParallelMultiInstanceBehavior.class) {
//            addTaskService.addParallelBefore(taskVo,"actBefore");
//            return;
//        }
//
//        //如果只加签了一个人
//        if (taskVo.getAddUser().size() == 1) {
//            ActivityImpl[] activities = addTaskService.addTaskBefore(taskVo);
//            List<Task> taskList = ActTaskUtils.getTaskList(activities[0].getId(), taskVo.getActId());
//            for (Task task : taskList) {
//                // 前加签时保存,记录当前用户登录名
//                taskService.setVariableLocal(task.getId(),"actSourceAssignee",UserUtils.getUser().getUserName());
//                // 前加签时保存,记录当前任务的key
//                taskService.setVariableLocal(task.getId(),"actSourceTaskKey",taskVo.getTaskKey());
//                // 修改节点名称，增加(前加签)
//                addTaskService.updateTaskName("actBefore",task.getId());
//            }
//
//        } else {
//            this.addParallelTask(taskVo);
//        }
//    }



    /**
     * 前加签并行节点
     *
     * @param taskVo
     * @return
     */
//    public ActivityImpl addParallelTask(TaskVo taskVo) {
//        JSONArray assigneeNameList = UserUtils.idToLoginName(taskVo.getAddUser());
//
//        ActivityImpl[] actBefore = addTaskService.addTaskBefore(taskVo,"actAddTaskBefore");
//
//        TaskEntity addTask = (TaskEntity) ActTaskUtils.getTask(actBefore[0].getId(), taskVo.getActId());
//
//        // 分裂节点
//        ActivityImpl activity = addTaskService.splitTask(addTask.getProcessDefinitionId(), addTask.getProcessInstanceId(), addTask, new HashMap<String, Object>(), false, "actBefore", assigneeNameList.toArray(new String[]{}));
//
//        // 查询通过分裂产生的待办
//        List<Task> taskList = ActTaskUtils.getTaskList(actBefore[0].getId(), taskVo.getActId());
//
//
//        for (int i = 0; i < taskList.size(); i++) {
//            Task task = taskList.get(i);
//
//            taskService.setAssignee(task.getId(), assigneeNameList.getString(i));
//            //谁前加签的这个节点
//            //taskService.setVariable(taskList.get(i).getId(), taskVo.getTaskKey(), activity.getId());
//
//            taskService.setVariableLocal(task.getId(),"actSourceAssignee",UserUtils.getUser().getUserName());
//
//            taskService.setVariableLocal(task.getId(),"actSourceTaskKey",taskVo.getTaskKey());
//
//            // 修改节点名称，增加(前加签)
//            addTaskService.updateTaskName("actBefore",task.getId());
//        }
//
//        actTaskService.delHiTask(addTask.getId());
//
//        return activity;
//    }


    /**
     * 前加签
     */
    public ActivityImpl[] insertTasksBefore(TaskVo taskVo) {
        return addTaskService.cloneAndMakeChain(taskVo, "actBefore", taskVo.getTaskKey(), taskVo.getOpinions(), UserUtils.idToLoginName(taskVo.getAddUser()).toArray(new String[]{}));
    }
}
